<?php
Zend_Loader::loadClass("Application_Ajax_Server_Function");
Zend_Loader::loadClass('Glazing');
Zend_Loader::loadClass('GlazingProps');
Zend_Loader::loadClass('GlazingPanesGases');


class SaveGlazing extends Application_Ajax_Server_Function
{
	public function call() {
		foreach ($this->_params as &$param) {
			$param = urldecode($param);
		}
		$esito = null;
		Model::getDefaultAdapter()->beginTransaction();
		$scenario = $this->_getParam('id', 0) ? "update" : "new";

		$rel = new GlazingPanesGases();

		try {
			$vetricomposti = new Glazing();
			$vetrocomposto = ($scenario == "new") ? $vetricomposti->createRow() : $vetricomposti->fetchRow($vetricomposti->select()->where('id = ?', $this->_getParam('id')));
			// vetro composto
			$vetrocomposto->name = $this->_getParam('glazing_name', '');
			$vetrocomposto->description = $this->_getParam('glazing_descr', '');
			$vetrocomposto->id_category = $this->_getParam('glazing_category_id', null);
			$vetrocomposto->source = $this->_getParam('glazing_source', '');
			$vetrocomposto->status = 1;
			$vetrocomposto->save();

			if ($scenario == "new") {
				$id_vetrocomposto = $vetricomposti->getAdapter()->lastInsertId();
			} else {
				$id_vetrocomposto = $this->_getParam('id');
			}

///////////////////////////////CAMBIARE DA QUI////////////////////////////////////////////////////////////
			// Strati (materiali)
			$rel = new GlazingPanesGases();
			// Strati: rimozione
			$recordSet = $rel->select()->where("id_glazing = ?", array($id_vetrocomposto));
			$rels = $rel->fetchAll($recordSet);
			foreach ($rels as $r) {
				$r->delete();
			}
			
////////////////TROVARE IL MODO PER COMPATTARE LA DICOTOMIA PANE-GAS////////////////7
			
			// Strati: scrittura
			// ...
			ksort($this->_params);
			//Zend_Debug::dump($this->_params); exit;
			foreach ($this->_params as $k => $s) {
				$exp = explode("_", $k);
				if ($exp[0] == "new" && $exp[1] == "pane"){
					if ($exp[3] == "id")
						$app[0] = $s;
					elseif ($exp[3] == "thickness")
					$app[1] = $s;
				}
				if(!empty($app[0]) && !empty($app[1])) {
					$app_panes[] = array($app[0], $app[1]);
					$app = array();
				}
			}

			foreach ($this->_params as $k => $s) {
				$exp = explode("_", $k);
				if ($exp[0] == "new" && $exp[1] == "gas"){
					if ($exp[3] == "id")
						$app[0] = $s;
					elseif ($exp[3] == "thickness")
					$app[1] = $s;
				}
				if(!empty($app[0]) && !empty($app[1])) {
					$app_gases[] = array($app[0], $app[1]);
					$app = array();
				}
			}
			
			
			
			//Qui le linee di codice per memorizzare nel database
			$i = 0;
			foreach ($app_panes as $mat) {
				$relProps = $rel->createRow();
				$relProps->id_glazing = $id_vetrocomposto;
				$relProps->id_pane = $mat[0];
				$relProps->layer = ($i*2)+1;
				$relProps->thickness = $mat[1];
				$relProps->save();
				$i++;
			}

			$i = 0;
			foreach ($app_gases as $mat) {
				$relProps = $rel->createRow();
				$relProps->id_glazing = $id_vetrocomposto;
				$relProps->id_gas = $mat[0];
				$relProps->layer = ($i*2)+2;
				$relProps->thickness = $mat[1];
				$relProps->save();
				$i++;
			}
			
			
			// proprietà 
			$phy = new GlazingProps();
			$Props = ($scenario == "new") ? $phy->createRow() : $phy->fetchRow($phy->select()->where('id = ?', $this->_getParam('id')));

			$Props->id = $id_vetrocomposto;
			$Props->translight = $this->_getParam('glazing_translight', 0);
			$Props->transsolar = $this->_getParam('glazing_transsolar', 0);
			$Props->transdirectsolar = $this->_getParam('glazing_transdirectsolar', 0);
			$Props->uvalue = $this->_getParam('glazing_uvalue', 0);
			$Props->en673uvalue = $this->_getParam('glazing_en673uvalue', 0);
			$Props->save();

			Model::getDefaultAdapter()->commit();
			if ($scenario == "new") {
				$msg = "Il vetro composto è stato aggiunta con successo al database";
			} else {
				$msg = "Le proprietà del vetro composto sono state aggiornate con successo";
			}
			$esito = true;

		} catch (Exception $ex) {

			$esito = false;
			Model::getDefaultAdapter()->rollBack();
			echo $ex->getMessage();
			if ($scenario == "new") {
				$msg = "Si è verificato un errore durante l'inserimento del nuovo vetro composto nel database";
			} else {
				$msg = "Si è verificato un errore durante l'aggiornamento delle proprietà del vetro composto nel database";
			}
		}

		$info = array ("esito" => $esito, "id" => $id_vetrocomposto, "messages" => $msg);
		return $info;
	}
}